home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1997 May: Tool Chest / Dev.CD May 97 TC.toast / Sample Code / Devices / TradDriverLoaderLib 1.0b4 / TestTradDriverLoaderLib.p < prev    next >
Encoding:
Text File  |  1997-03-07  |  6.9 KB  |  253 lines  |  [TEXT/CWIE]

  1. program TestTradDriverLoaderLib;
  2.  
  3. (*
  4.     File:        TestTradDriverLoaderLib.p
  5.  
  6.     Contains:    Pascal program to test TradDriverLoaderLib.
  7.  
  8.     Written by:    Quinn "The Eskimo!"
  9.  
  10.     Copyright:    © 1996 by Apple Computer, Inc., all rights reserved.
  11.  
  12.     Change History (most recent first):
  13.  
  14.     You may incorporate this sample code into your applications without
  15.     restriction, though the sample code has been provided "AS IS" and the
  16.     responsibility for its operation is 100% yours.  However, what you are
  17.     not permitted to do is to redistribute the source as "DSC Sample Code"
  18.     after having made changes. If you're going to re-distribute the source,
  19.     we require that you make it clear in the source that the code was
  20.     descended from Apple Sample Code, but that you've made changes.
  21. *)
  22.  
  23.     uses
  24.         Types,
  25.         LowMem,
  26.         Files,
  27.         Devices,
  28.         
  29.         TradDriverLoaderLib;
  30.         
  31.     procedure CheckTestResult(err : OSErr; mesg : Str255);
  32.     begin
  33.         if err = noErr then begin
  34.             writeln('  Passed ', mesg, '.');
  35.         end else begin
  36.             writeln('  •••Failed ', mesg, ' with error ', err:1, '.');
  37.         end; (* if *)
  38.     end; (* CheckTestResult *)
  39.     
  40.     procedure CheckTestResultBool(b : Boolean; mesg : Str255);
  41.     begin
  42.         if b then begin
  43.             writeln('  Passed ', mesg, '.');
  44.         end else begin
  45.             writeln('  •••Failed ', mesg, '.');
  46.         end; (* if *)
  47.     end; (* CheckTestResultBool *)
  48.  
  49.     procedure TestTradHighestUnitNumber;
  50.     begin
  51.         writeln('TestTradHighestUnitNumber');
  52.         writeln;
  53.         CheckTestResultBool( TradHighestUnitNumber = (LMGetUnitTableEntryCount - 1) , 'check against LMGetUnitTableEntryCount');
  54.     end; (* TestTradHighestUnitNumber *)
  55.     
  56.     procedure TestInstallOpenRemove;
  57.         var
  58.             err : OSErr;
  59.             rsrcName : Str255;
  60.             refNum : DriverRefNum;
  61.             cpb : CntrlParam;
  62.     begin
  63.         writeln('TestInstallOpenRemove');
  64.         writeln;
  65.         
  66.         (* Install *)
  67.         rsrcName := '.Test';
  68.         err := TradInstallDriverFromResource(0, @rsrcName, 48, TradHighestUnitNumber() + 1, refNum);
  69.         CheckTestResult(err, 'install');
  70.         
  71.         (* Open *)
  72.         if err = noErr then begin
  73.             err := TradOpenInstalledDriver(refNum, fsRdWrPerm);
  74.             CheckTestResult(err, 'open');
  75.         end; (* if *)
  76.         
  77.         (* Functional *)
  78.         if err = noErr then begin
  79.             cpb.ioCRefNum := refNum;
  80.             cpb.csCode := 666;
  81.             err := PBStatusSync(@cpb);
  82.             CheckTestResult(err, 'status call');
  83.         end; (* if *)
  84.         if err = noErr then begin
  85.             CheckTestResultBool(cpb.csParam[0] = refNum, 'results from status call');
  86.         end; (* if *)
  87.         
  88.         (* Remove *)
  89.         if err = noErr then begin
  90.             err := TradRemoveDriver(refNum, false);
  91.             CheckTestResult(err, 'remove');        
  92.         end; (* if *)
  93.  
  94.         writeln;
  95.     end; (* TestInstallOpenRemove *)
  96.  
  97.     procedure TestGestaltCalls;
  98.         var
  99.             rsrcName : Str255;
  100.             err : OSErr;
  101.             refNum : DriverRefNum;
  102.             flags : DriverFlags;
  103.     begin
  104.         writeln('TestGestaltCalls');
  105.         writeln;
  106.  
  107.         (* Install *)
  108.         rsrcName := '.Test';
  109.         err := TradInstallDriverFromResource(0, @rsrcName, 48, TradHighestUnitNumber() + 1, refNum);
  110.         CheckTestResult(err, 'install');
  111.  
  112.         (* Open *)
  113.         if err = noErr then begin
  114.             err := TradOpenInstalledDriver(refNum, fsRdWrPerm);
  115.             CheckTestResult(err, 'open');
  116.         end; (* if *)
  117.  
  118.         (* Gestalt On *)
  119.         if err = noErr then begin
  120.             err := TradDriverGestaltOn(refNum);
  121.             CheckTestResult(err, 'set Gestalt on');
  122.         end; (* if *)
  123.         if err = noErr then begin
  124.             err := TradGetDriverInformation(refNum, nil, @flags, nil, nil);
  125.             CheckTestResultBool((err = noErr) & TradDriverGestaltIsOn(flags), 'confirm Gestalt on');
  126.         end; (* if *)
  127.  
  128.         (* Gestalt Off *)
  129.         if err = noErr then begin
  130.             err := TradDriverGestaltOff(refNum);
  131.             CheckTestResult(err, 'set Gestalt off');
  132.         end; (* if *)
  133.         if err = noErr then begin
  134.             err := TradGetDriverInformation(refNum, nil, @flags, nil, nil);
  135.             CheckTestResultBool((err = noErr) & not TradDriverGestaltIsOn(flags), 'confirm Gestalt off');
  136.         end; (* if *)
  137.  
  138.         (* Remove *)
  139.         if err = noErr then begin
  140.             err := TradRemoveDriver(refNum, false);
  141.             CheckTestResult(err, 'remove');        
  142.         end; (* if *)
  143.  
  144.         writeln;
  145.     end; (* TestGestaltCalls *)
  146.     
  147.     
  148.     procedure TestInfoCalls;
  149.         var
  150.             err : OSErr;
  151.             refNumsCount : ItemCount;
  152.             i : ItemCount;
  153.             refNums : packed array [0..999] of DriverRefNum;
  154.             thisUnit : UnitNumber;
  155.             flags : DriverFlags;
  156.             name : Str255;
  157.             driverHeader : DRVRHeaderPtr;
  158.     begin
  159.         writeln('TestInfoCalls');
  160.         writeln;
  161.  
  162.         refNumsCount := 1000;
  163.         err := TradLookupDrivers(0, TradHighestUnitNumber, false, refNumsCount, @refNums[0]);
  164.         CheckTestResult(err, 'lookup drivers');        
  165.         if err = noErr then begin
  166.             for i := 0 to refNumsCount - 1 do begin
  167.                 err := TradGetDriverInformation(refNums[i], @thisUnit, @flags, @name, @driverHeader);
  168.                 if err = noErr then begin
  169.                     writeln('  refNum=', refNums[i]:1, ', unit=', thisUnit:1, ', flags=', (ord4(flags)), 
  170.                                     ', name=“', name, '”, addr=', ord4(driverHeader));
  171.                 end else begin
  172.                     writeln('  •••Error ', err:1, ' getting info for refnum ', refNums[i]:1, '.');
  173.                 end; (* if *)
  174.             end; (* for *)
  175.         end; (* if *)
  176.  
  177.         writeln;        
  178.     end; (* TestInfoCalls *)
  179.  
  180.     procedure TestAddLots;
  181.         var
  182.             err : OSErr;
  183.             refNum : DriverRefNum;
  184.             highChar : char;
  185.             lowChar : char;
  186.             rsrcName : Str255;
  187.     begin
  188.         writeln('TestAddLots');
  189.         writeln;
  190.         
  191.         (* Add 2 * 26 = 52) drivers to the unit table and open them all!
  192.                 Have to stop before 'T' otherwise our unique names clash with '.Test'.
  193.                 Note that this is limited by kMaximumNumberOfUnitTableEntries defined
  194.                 in TradDriverLoaderLib.c.
  195.         *)
  196.         
  197.         for highChar := 'A' to 'B' do begin
  198.             for lowChar := 'A' to 'Z' do begin
  199.                 rsrcName := '.Test';
  200.                 err := TradInstallDriverFromResource(0, @rsrcName, 48, TradHighestUnitNumber() + 1, refNum);
  201.                 if err = noErr then begin
  202.                     rsrcName[2] := highChar;
  203.                     rsrcName[3] := lowChar;
  204.                     err := TradRenameDriver(refNum, rsrcName);
  205.                 end; (* if *)
  206.                 if err = noErr then begin
  207.                     err := TradOpenInstalledDriver(refNum, fsRdWrPerm);
  208.                 end; (* if *)
  209.                 if err <> noErr then begin
  210.                     writeln('  •••Adding lots failed at ''', highChar, lowChar, ''' with error ', err:1, '.');
  211.                     exit(TestAddLots);
  212.                 end; (* if *)
  213.             end; (* for *)
  214.         end; (* for *)
  215.         
  216.         writeln('  Drivers added successfully!');
  217.         
  218.         (* Remove all of the added units. *)
  219.  
  220.         for highChar := 'A' to 'B' do begin
  221.             for lowChar := 'A' to 'Z' do begin
  222.                 rsrcName := '.Test';
  223.                 rsrcName[2] := highChar;
  224.                 rsrcName[3] := lowChar;
  225.                 err := OpenDriver(rsrcName, refNum);
  226.                 if err = noErr then begin
  227.                     err := TradRemoveDriver(refNum, false);
  228.                 end; (* if *)
  229.                 if err <> noErr then begin
  230.                     writeln('  •••Removing lots failed at ''', highChar, lowChar, ''' with error ', err:1, '.');
  231.                     exit(TestAddLots);
  232.                 end; (* if *)
  233.             end; (* for *)
  234.         end; (* for *)
  235.         
  236.         writeln('  Drivers removed successfully!');
  237.  
  238.         writeln;
  239.     end; (* TestAddLots *)
  240.     
  241. begin
  242.     writeln('Hello Cruel World!');
  243.     writeln;
  244.     writeln('TestTradDriverLoaderLib');
  245.     writeln('-- a test tool for the TradDriverLoaderLib library.');
  246.     writeln;
  247.     TestInstallOpenRemove;
  248.     TestGestaltCalls;
  249.     TestInfoCalls;
  250.     // TestAddLots;
  251.     writeln('Done.  Press command-Q to Quit.');
  252. end. (* TestTradDriverLoaderLib *)
  253.